Módulo: Funcionalidad Integral del Panel del Profesor
Este documento es la guía maestra. Todo el desarrollo se regirá por los siguientes principios, además de los ya establecidos en directrices.txt
.
$mysqli->real_escape_string()
para toda entrada que vaya a una consulta SQL. Se implementarán transacciones para operaciones críticas. Esta sección define la base operativa del archivo aula_virtual_profesor_pp.php
.
Objetivo: Determinar de forma segura qué curso y profesor se están visualizando.
Lógica de Negocio:
curso_id
en la superglobal $_GET
. Si no lo encuentra, buscará en $_SESSION
.curso_id
válido en ninguna de las dos fuentes, el script mostrará un mensaje de error claro (ej: "Acceso denegado. No se ha especificado un curso.") y detendrá su ejecución.profesor_id
se obtendrá de la sesión del usuario autenticado (ej: $_SESSION['usuario_id']
).profesor_id
está asignado al curso_id
a través de la tabla cursos_profesores
. Si no hay una asignación válida, se negará el acceso.Tablas Implicadas: cursos_profesores
.
Análisis componente por componente de la vista #view-dashboard
.
Objetivo: Proveer una vista rápida de los indicadores clave de rendimiento del curso.
cursos_sence.nombre_actividad
usando el $curso_id
de contexto y se imprimirá en el <h1>
.inscripciones_curso
donde curso_id = $curso_id
y estado = 'activo'
.SELECT COUNT(id) FROM subtemas_curso WHERE curso_id = $curso_id AND es_obligatorio_sence = 1;
SELECT COUNT(id) FROM subtemas_alumno WHERE alumno_id = ? AND modo = 'completado';
mensajes_alumno_profesor
donde profesor_id = $profesor_id
, curso_id = $curso_id
y respondido = 0
.$intervalo_online_minutos = 60;
. La consulta contará los alumnos únicos en accesos_aula_virtual
donde la fecha_acceso
sea dentro de ese intervalo.Objetivo: Mostrar una cronología de las últimas interacciones de los alumnos.
Lógica de Negocio:
SELECT alumno_id, fecha_acceso AS fecha_evento, 'ingreso' AS tipo FROM accesos_aula_virtual WHERE curso_id = ? ORDER BY fecha_acceso DESC LIMIT 10;
SELECT sa.alumno_id, sa.fecha_visto AS fecha_evento, 'video' AS tipo, sc.titulo AS detalle FROM subtemas_alumno sa JOIN subtemas_curso sc ON sa.subtema_id = sc.id WHERE sa.curso_id = ? ORDER BY sa.fecha_visto DESC LIMIT 10;
fecha_evento
de forma descendente.alumnos.nombre
y alumnos.apellido_paterno
y se construirá una frase descriptiva. Ejemplo: "Juan Pérez completó el video 'Conceptos Clave'".Objetivo: Mostrar los anuncios más importantes para el curso.
Lógica de Negocio: Se consultará la tabla pizarra_curso
filtrando por curso_id
. Se ordenará por destacado DESC
y luego por fecha_publicacion DESC
, con un LIMIT 2
para mostrar los dos más relevantes. Los anuncios con destacado = 1
recibirán una clase CSS especial (`mensaje-destacado`) para su presentación visual. El botón "Publicar Nuevo Anuncio" enlazará a ingresa_mensaje.php?curso_id=$curso_id
.
Análisis de la vista #view-progreso-alumno
, que se activa al hacer clic en un alumno.
Objetivo: Mostrar la información identificativa y de contacto del alumno seleccionado.
Lógica de Negocio: Cuando se carga la vista con un $_GET['alumno_id']
, se consulta la tabla alumnos
para obtener nombre
, apellido_paterno
, correo
, telefono
, y foto_perfil
. El estado ("En Curso", "Egresado", etc.) se obtendrá de inscripciones_curso.modo
. El "Último acceso" provendrá de la consulta más reciente en accesos_aula_virtual
para ese alumno.
Objetivo: Proporcionar accesos directos a interacciones clave con el alumno.
#mensajesModal
.
mensajes_alumno_profesor
para listar el historial de conversación entre $profesor_id
y $alumno_id
.<span class="badge bg-danger">
) se calculará contando los mensajes de ese alumno donde leido = 'no'
.#evaluacionesModal
.
notas_alumno
para listar todas las evaluaciones y notas formales del alumno, asociadas a su inscripción.#calificaModal
.
evaluaciones_cualitativas_profesor
, que contendrá id, alumno_id, profesor_id, curso_id, participacion, motivacion, iniciativa, comentarios, fecha_evaluacion
.Objetivo: Mostrar el progreso granular del alumno en cada actividad del curso.
Lógica de Negocio:
temas_curso
y subtemas_curso
.LEFT JOIN
a la tabla subtemas_alumno
filtrando por el alumno_id
actual.subtemas_curso.titulo
.subtemas_alumno.tiempo_visualizacion
y subtemas_curso.duracion_minutos
.subtemas_alumno.modo
('Completado', 'En Progreso', 'No Iniciado').subtemas_alumno.fecha_visto
si el estado es 'Completado'.Esta es una de las áreas más complejas y su desarrollo se abordará en fases posteriores.
#crearPreguntaModal
): El formulario dentro de este modal requerirá un script backend dedicado para insertar los datos en tablas de evaluaciones (ej. evaluacion_preguntas
y evaluacion_opciones
, que necesitarían ser creadas).#gestionDocumentosModal
): Al abrirse, este modal se poblará dinámicamente vía PHP (pasando el `subtema_id`) consultando la tabla `documentos_subtema`. La subida de un nuevo archivo y la eliminación de uno existente requerirán sus propios scripts de procesamiento.Esta vista mostrará un resumen de las calificaciones que los alumnos han otorgado a los contenidos.
AVG
, COUNT
) sobre la tabla subtemas_alumno
, agrupando por subtema_id
para obtener los promedios de las distintas calificaciones.Será el inbox centralizado del profesor para todas sus conversaciones del curso.
messages_alumno_profesor
para obtener todas las conversaciones del profesor, agrupándolas por alumno. Se mostrará un extracto del último mensaje y un indicador de estado (leído/no respondido).